package main

import (
	"github.com/tendermint/go-amino"
	dbm "github.com/tendermint/tm-db"

)

var (
	stateKey =[]byte("stateKey")   // 状态的key
	kvPairPrefixKey =[]byte("kvPairKey:")  // 业务KV 数据

)
// 使用 amino编码
var cdc = amino.NewCodec()

type State struct {
	db dbm.DB  // 保存 {"val:pubstr": ValidatorUpdate字节码 }
	Height int64 `json:"height"`
	Size int64  `json:"size"`
	AppHash []byte `json:"app_hash"`
}


// 加载状态,初始化应用状态时候调用
func loadState(db dbm.DB) State {
	stateBytes:=db.Get(stateKey)

	var state State
	if len(stateBytes) !=0 {
		//err:=json.Unmarshal(stateBytes,&state)
		err:=cdc.UnmarshalBinaryBare(stateBytes,&state)
		if err!=nil{
			panic(err)
		}
	}

	state.db=db

	return state
}

//更新 App 状态
func saveState(state State)  {
	// 使用json编码
	//	stateBytes,err:=json.Marshal(state)

	stateBytes,err:=cdc.MarshalBinaryBare(state)

	if err!=nil{
		panic(err)
	}

	state.db.Set(stateKey,stateBytes)

}
